﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Tecnopez.Globals;
using BussinessLogicTecnoPez.Produccion.Compras;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using BussinessLogicTecnoPez.Tipos_Comunes;
using System.Collections.Generic;
using BussinessLogicTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation;

namespace TecnoPezWeb.Modules.Compras
{
    public partial class LotesOvas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.Page.IsPostBack)
            {
                SetMode(PageMode.ListMode);
            }

            TPPEspecie.ObjType = typeof(Especie);
            TPPProveedor.ObjType = typeof(Proveedor);

            InicializarValidadores();
            InicializarGrilla();

            //cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

            GenericMasterPage master = (GenericMasterPage)this.Master;
            master.Imagen = "../Styles/Icons/configurar.gif";
            master.Titulo = "Gestión de Lotes de Ovas";
            cargarGrilla();
            _lblError.Text = "";
        }

        private void InicializarValidadores()
        {
            PPVCantidad.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.LoteOva";
            PPVCantidad.ControlToValidate = "txtCantidad";
            PPVCantidad.PropertyName = "Cantidad";
            PPVCantidad.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVCodigo.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.LoteOva";
            PPVCodigo.ControlToValidate = "txtCodigo";
            PPVCodigo.PropertyName = "Codigo";
            PPVCodigo.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVEspecie.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.LoteOva";
            PPVEspecie.ControlToValidate = "txtCodigo";
            PPVEspecie.PropertyName = "Especie";
            PPVEspecie.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVProveedor.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.LoteOva";
            PPVProveedor.ControlToValidate = "txtCodigo";
            PPVProveedor.PropertyName = "Proveedor";
            PPVProveedor.DisplayMode = ValidationSummaryDisplayMode.List;
        }

        private void InicializarGrilla()
        {
            grdLotesOvas.setupGrid<LoteOva>(cargarGrilla, seleccionarLoteOva, null, true, this.ViewState);
        }

        private void seleccionarLoteOva(int o)
        {
            int IdLote = int.Parse(grdLotesOvas.grdDatosAbmView.DataKeys[o].Value.ToString());
            LoteOva.getManager.ClearFilters();
            LoteOva.getManager.AddFilter("IDLOTEOVA", GenericManager<LoteOva>.filterOperator.Equals, IdLote);
            LoteOva objLoteOva = LoteOva.getManager.GetOne();
            txtId.Text = objLoteOva.IdLoteOva.ToString();
            txtCantidad.Text = objLoteOva.Cantidad.ToString();
            txtCodigo.Text = objLoteOva.Codigo.Trim();
            txtEstado.Text = objLoteOva.TipoEstadoLoteOva.ToString();
            TPCFechaIngreso.Text = objLoteOva.FechaIngreso.Date.ToShortDateString();

            ViewState["EstadoLoteOva"] = objLoteOva.TipoEstadoLoteOva;

            if (objLoteOva.TipoEstadoLoteOva.IdTipoEstadoLoteOva != 1)
                cmdEditar.OnClientClick = "alert(\"Solo pueden editarse Lotes en estado \'Pendiente a Incubar\'\");";
            else
                cmdEditar.OnClientClick = "";
            
            if (objLoteOva.Proveedor != null)
                TPPProveedor.ItemSelected = objLoteOva.Proveedor;
            else
                TPPProveedor.ItemSelected = null;

            if (objLoteOva.Especie != null)
                TPPEspecie.ItemSelected = objLoteOva.Especie;
            else
                TPPEspecie.ItemSelected = null;

            SetMode(PageMode.ViewMode);
        }

        private void cargarGrilla()
        {
            LoteOva.getManager.ClearFilters();
            LoteOva.getManager.ClearOrders();
            LoteOva.getManager.AddFilter("Codigo", GenericManager<LoteOva>.filterOperator.Like, "%" + txtBuscarCodigo.Text.Trim() + "%");
            if (ddlBuscarEstado.SelectedValue != "-1")
            {
                LoteOva.getManager.AddFilter("TIPOESTADOLOTEOVA", GenericManager<LoteOva>.filterOperator.Equals, ddlBuscarEstado.SelectedValue);
            }

            List<LoteOva> lista = new List<LoteOva>();
            lista = LoteOva.getManager.GetFilter();
            grdLotesOvas.grdDatosAbmView.DataSource = lista;
            grdLotesOvas.grdDatosAbmView.DataBind();
        }

        private void CargarComboEstado()
        {
            ddlBuscarEstado.DataTextField = "DESCRIPCION";
            ddlBuscarEstado.DataValueField = "IDTIPOESTADOLOTEOVA";
            ddlBuscarEstado.DataSource = TipoEstadoLoteOvas.getManager.GetAll();
            ddlBuscarEstado.DataBind();

            ListItem item = new ListItem();
            item.Text = "Seleccione...";
            item.Value = "-1";

            ddlBuscarEstado.Items.Insert(0, item);
        }

        private void SetMode(PageMode mode)
        {
            ViewState["PageMode"] = mode;

            cmdEliminar.Visible = false;

            switch (mode)
            {
                case PageMode.ListMode:
                    wzrABM.ActiveStepIndex = 0;
                    CargarComboEstado();
                    break;
                case PageMode.NewMode:
                    wzrABM.ActiveStepIndex = 1;
                    this.txtId.Enabled = false;
                    this.TPCFechaIngreso.Enabled = true;
                    this.txtEstado.Enabled = false;
                    this.txtCodigo.Enabled = true;
                    this.txtCantidad.Enabled = true;
                    this.TPPEspecie.Enable = true;
                    this.TPPProveedor.Enable = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    //cmdEliminar.Enabled = false;
                    break;
                case PageMode.EditMode:
                    wzrABM.ActiveStepIndex = 1;
                    this.txtId.Enabled = false;
                    this.TPCFechaIngreso.Enabled = true;
                    this.txtEstado.Enabled = false;
                    this.txtCodigo.Enabled = true;
                    this.txtCantidad.Enabled = true;
                    this.TPPEspecie.Enable = true;
                    this.TPPProveedor.Enable = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    //cmdEliminar.Enabled = false;
                    break;
                case PageMode.ViewMode:
                    wzrABM.ActiveStepIndex = 1;
                    this.txtId.Enabled = false;
                    this.TPCFechaIngreso.Enabled = false;
                    this.txtEstado.Enabled = false;
                    this.txtCodigo.Enabled = false;
                    this.txtCantidad.Enabled = false;
                    this.TPPEspecie.Enable = false;
                    this.TPPProveedor.Enable = false;
                    cmdAceptar.Visible = false;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = true;
                    //cmdEliminar.Enabled = true;
                    break;
            }
        }

        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            this.txtId.Text = "";
            this.TPCFechaIngreso.Text = DateTime.Today.Date.ToShortDateString();
            this.txtCodigo.Text = "";
            this.txtCantidad.Text = "";
            this.TPPEspecie.ItemSelected = null;
            this.TPPProveedor.ItemSelected = null;

            TipoEstadoLoteOvas objEstado = getEstadoInicial();
            this.txtEstado.Text = objEstado.ToString();
            ViewState["EstadoLoteOva"] =objEstado;

            SetMode(PageMode.NewMode);
        }

        private TipoEstadoLoteOvas getEstadoInicial()
        {
            TipoEstadoLoteOvas.getManager.ClearFilters();
            TipoEstadoLoteOvas.getManager.ClearOrders();
            TipoEstadoLoteOvas.getManager.AddFilter("IDTIPOESTADOLOTEOVA", GenericManager<TipoEstadoLoteOvas>.filterOperator.Equals, 1);

            return TipoEstadoLoteOvas.getManager.GetOne();
        }

        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            TipoEstadoLoteOvas objEstado = (TipoEstadoLoteOvas)ViewState["EstadoLoteOva"];
            if (objEstado != null && objEstado.IdTipoEstadoLoteOva == 1)
                SetMode(PageMode.EditMode);         
        }
        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            //no se puede eliminar el lote de ovas.
        }
        protected void cmdAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                LoteOva objLoteOva = new LoteOva();
                if (txtCantidad.Text.Trim() != string.Empty)
                    objLoteOva.Cantidad = int.Parse(txtCantidad.Text.Trim());
                objLoteOva.Codigo = txtCodigo.Text.Trim();
                objLoteOva.FechaIngreso = Convert.ToDateTime(TPCFechaIngreso.Text);

                if (TPPEspecie.ItemSelected != null)
                {
                    Especie objEspecie = new Especie();
                    objEspecie = (Especie)TPPEspecie.ItemSelected;
                    objLoteOva.Especie = objEspecie;
                    objEspecie = null;
                }

                if (TPPProveedor.ItemSelected != null)
                {
                    Proveedor objProveedor = new Proveedor();
                    objProveedor = (Proveedor)TPPProveedor.ItemSelected;
                    objLoteOva.Proveedor = objProveedor;
                    objProveedor = null;
                }

                objLoteOva.TipoEstadoLoteOva = (TipoEstadoLoteOvas)ViewState["EstadoLoteOva"];

                if (validar(objLoteOva))
                {
                    if (getMode() == PageMode.NewMode)
                    {
                        if (LoteOva.getManager.Insert(objLoteOva) != true)
                        {
                            throw LoteOva.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ListMode);
                        cargarGrilla();
                    }
                    else
                    {
                        objLoteOva.IdLoteOva = int.Parse(txtId.Text.ToUpper().Trim());
                        if (LoteOva.getManager.Update(objLoteOva) != true)
                        {
                            throw LoteOva.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ViewMode);
                    }
                }
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }
        }

        private PageMode getMode()
        {
            if (ViewState["PageMode"] == null)
                return PageMode.ModeNotFound;
            return (PageMode)ViewState["PageMode"];
        }

        private bool validar(LoteOva objeto)
        {
            ValidationResults v = Validation.Validate<LoteOva>(objeto);
            if (!v.IsValid)
            {
                _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
            }
            return v.IsValid;
        }

        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }
        protected void PPVEspecie_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (TPPEspecie.ItemSelected == null)
                e.ConvertedValue = null;
            else
                e.ConvertedValue = TPPEspecie.ItemSelected.ToString();
        }
        protected void PPVProveedor_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (TPPProveedor.ItemSelected == null)
                e.ConvertedValue = null;
            else
                e.ConvertedValue = TPPProveedor.ItemSelected.ToString();
        }
        protected void PPVCantidad_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (txtCantidad.Text.Trim() == string.Empty)
                e.ConvertedValue = null;
            else
            {
                int aux;
                if (!int.TryParse(txtCantidad.Text.Trim(),out aux))
                    e.ConvertedValue = null;
                else
                    e.ConvertedValue = txtCantidad.Text.Trim();
            }
        }
}
}